#include "execute_task.h"
#include "GatherDataHandlerMemory.h"

TaskHandle_t execute_handler;
// 引入处理好的数据
extern GatherDataTarget gatherDataTarget;

// 声明用户配置数据
THData thData;

//执行和控制的函数声明
//报警
void alarmContrl();
//显示
void showContrl();
// //空调
// void airConditioningContrl();
// //窗帘
// void curtainContrl();

void execute_task_init()
{ 
    // 外设初始化
    ledInit();
    OLED_Init();
    BEEP_Init();
    
}

// 任务启动函数
void execute_task(void *param)
{
    // 声明次数
    u8 timers = 0;
    // 声明是否加载到数据
    u8 flag = 0;
    while (1)
    {
        // 从EEPROM种获取用户配置数据 --> 写死
        if (thData.state == 0 && !flag)
        {
            if (timers > 10)
            {
                // 加载10用户还没有配置数据， 暂时写死
                thData.state = 15; // 1111 = 15
                thData.temp = 60;
                thData.humi = 90;
                thData.somke = 80;
                thData.sunshine = 80;
                flag = 1;
            }
            timers ++;
            // 加载thdata
            if (!loadTHData(&thData)) 
            {
                continue;
            }else
            {
                flag = 1;
            } 
        }

        // 根据用户配置的标准执行相应的决策
        // 显示数据
        if (thData.state & 0x01) showContrl();
        // 报警
        if (thData.state & 0x02) alarmContrl();
         // 控制温度
         //if (thData.state & 0x04) airConditioningContrl();
        // // 控制光照
        // if (thData.state & 0x08) curtainContrl();
        vTaskDelay(500);
    }
}

// 程序启动函数
void execute_task_create()
{
    // 创建任务
    BaseType_t res = xTaskCreate(execute_task, "execute_task", 256, NULL, 2, &execute_handler);
    if (res == pdPASS)
    {
        printf("execute_task create success!\r\n");
    }
}  

//报警
void alarmContrl()
{
    // 申明蜂鸣器标志位
    u8 flag = 0;
    // 灯常亮
    // 温度比对
    if (gatherDataTarget.temp > thData.temp){ LED1 = 0; flag = 1;} else{ LED1 = 1;}
    // 湿度比对
    if (gatherDataTarget.humi > thData.humi){ LED2 = 0; flag = 1;} else{ LED2 = 1;}
    // 烟雾对比
    if (gatherDataTarget.somke > thData.somke){ LED3 = 0; flag = 1;} else{ LED3 = 1;}
    // 光照对比
    if (gatherDataTarget.sunshine > thData.sunshine){ LED4 = 0; flag = 1;}else{ LED4 = 1;}
    // 雨滴
    if (!gatherDataTarget.raidrop){ LED5 = 0; flag = 1;}else{ LED5 = 0;}

    // 蜂鸣器提示
    if (flag)
    {
        while (1)
        {
            BEEP_Alarm(100, 100);
            vTaskDelay(10);
        }
    }
}

//显示
void showContrl()
{
    OLED_Clear();
	OLED_ShowString(0, 0,  "Temp:   C", 12);
	OLED_ShowString(0, 15, "Humi:   %", 12);
	OLED_ShowString(0, 30, "SOMKE:   %", 12);
	OLED_ShowString(0, 45, "sunshine:   %", 12);

    OLED_ShowNum(5*6, 0, gatherDataTarget.temp, 3, 12);
	OLED_ShowNum(5*6, 15, gatherDataTarget.humi, 3, 12);
	OLED_ShowNum(6*6, 30, gatherDataTarget.somke, 3, 12);
	OLED_ShowNum(9*6, 45, gatherDataTarget.sunshine, 3, 12);
	OLED_Refresh_Gram();
}

// //空调
// void airConditioningContrl(){}
// //窗帘
// void curtainContrl(){}

// 赋值
void setTHData(THData tmpTHData)
{
    thData = tmpTHData;
}